package com.aaa.proxy.impl;

import com.aaa.proxy.DynamicProxy;
import lombok.extern.java.Log;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Date;

/**
 * @author ：Teacher陈（86521760@qq.com）
 * @date ：Created in 2022/8/19 10:02
 * @description：
 * @modified By：
 * @version:
 */
@Log
public class DynamicProxyImplJdk<T>  implements DynamicProxy<T>, InvocationHandler {
    T targetObj;
    public T getProxy(T target) {
        targetObj=target;
        Object proxyInstance = Proxy.newProxyInstance(targetObj.getClass().getClassLoader(), targetObj.getClass().getInterfaces(), this);
        return  (T) proxyInstance;
    }

    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        //前置的增强处理
        System.out.println("前置处理");
        log.info("日志："+method.getName()+"执行了"+new Date());
        //目标对象执行
        Object invoke = method.invoke(targetObj, args);
        //后置的增强处理
        System.out.println("后置处理");
        return invoke;
    }
}
